home *** CD-ROM | disk | FTP | other *** search
/ Chip 1998 September / CHIP Eylül 1998.iso / Slackwar / docs / linux-2.0.34 / specialix.txt < prev    next >
Text File  |  1997-08-11  |  13KB  |  335 lines

  1.  
  2.       specialix.txt  -- specialix IO8+ multiport serial driver readme.
  3.  
  4.  
  5.  
  6.       Copyright (C) 1997  Roger Wolff (R.E.Wolff@BitWizard.nl)
  7.  
  8.       Specialix pays for the development and support of this driver.
  9.       Please DO contact io8-linux@specialix.co.uk if you require
  10.       support.
  11.  
  12.       This driver was developed in the BitWizard linux device
  13.       driver service. If you require a linux device driver for your
  14.       product, please contact devices@BitWizard.nl for a quote.
  15.  
  16.       This code is firmly based on the riscom/8 serial driver,
  17.       written by Dmitry Gorodchanin. The specialix IO8+ card
  18.       programming information was obtained from the CL-CD1865 Data
  19.       Book, and Specialix document number 6200059: IO8+ Hardware
  20.       Functional Specification.
  21.  
  22.       This program is free software; you can redistribute it and/or
  23.       modify it under the terms of the GNU General Public License as
  24.       published by the Free Software Foundation; either version 2 of
  25.       the License, or (at your option) any later version.
  26.  
  27.       This program is distributed in the hope that it will be
  28.       useful, but WITHOUT ANY WARRANTY; without even the implied
  29.       warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
  30.       PURPOSE.  See the GNU General Public License for more details.
  31.  
  32.       You should have received a copy of the GNU General Public
  33.       License along with this program; if not, write to the Free
  34.       Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
  35.       USA.
  36.  
  37.  
  38. Intro
  39. =====
  40.  
  41.  
  42. This file contains some random information, that I like to have online
  43. instead of in a manual that can get lost. Ever misplace your Linux
  44. kernel sources?  And the manual of one of the boards in your computer?
  45.  
  46.  
  47. Adresses and interrupts
  48. =======================
  49.  
  50. Addres dip switch settings:
  51. The dip switch sets bits 2-9 of the IO address. 
  52.  
  53.        9 8 7 6 5 4 3 2 
  54.      +-----------------+
  55.    0 | X   X X X X X X |
  56.      |                 |    =   IoBase = 0x100 
  57.    1 |   X             |
  58.      +-----------------+          ------ RS232 connectors ---->
  59.          
  60.          |    |    |
  61.        edge connector
  62.          |    |    |
  63.          V    V    V
  64.  
  65. Base address 0x100 caused a conflict in one of my computers once.  I
  66. haven't the foggiest why. My Specialix card is now at 0x180.  My
  67. other computer runs just fine with the Specialix card at 0x100....
  68. The card occupies 4 addresses, but actually only two are really used.
  69.  
  70. The driver now still autoprobes at 0x100, 0x180, 0x250 and 0x260.  If
  71. that causes trouble for you, please report that. I'll remove
  72. autoprobing then.
  73.  
  74. The driver will tell the card what IRQ to use, so you don't have to
  75. change any jumpers to change the IRQ. Just use a command line
  76. argument (irq=xx) to the insmod program to set the interrupt.
  77.  
  78. If your specialix cards are not at the default locations, you can use
  79. the kernel command line argument "specialix=io0,irq0,io1,irq1...".
  80. Here "io0" is the io address for the first card, and "irq0" is the
  81. irq line that the first card should use. And so on. 
  82.  
  83. Examples. 
  84.  
  85. You use the driver as a module and have three cards at 0x100, 0x250
  86. and 0x180. And some way or another you want them detected in that
  87. order. Moreover irq 12 is taken (e.g. by your PS/2 mouse).
  88.  
  89.   insmod specialix.o iobase=0x100,0x250,0x180 irq=9,11,15
  90.  
  91. The same three cards, but now in the kernel would require you to
  92. add 
  93.  
  94.    specialix=0x100,9,0x250,11,0x180,15
  95.  
  96. to the command line. This would become 
  97.  
  98.    append="specialix=0x100,9,0x250,11,0x180,15" 
  99.  
  100. in your /etc/lilo.conf file if you use lilo. 
  101.  
  102.  
  103. Baud rates
  104. ==========
  105.  
  106. The rev 1.2 and below boards use a CL-CD1864. These chips can only 
  107. do 64kbit. The rev 1.3 and newer boards use a CL-CD1865. These chips
  108. are officially capable of 115k2.
  109.  
  110. The Specialix card uses a 25MHz crystal (in times two mode, which in
  111. fact is a divided by two mode). This is not enough to reach the rated
  112. 115k2 on all ports at the same time. With this clock rate you can only
  113. do 37% of this rate. This means that at 115k2 on all ports you are
  114. going to loose characters (The chip cannot handle that many incoming
  115. bits at this clock rate.) (Yes, you read that correctly: there is a
  116. limit to the number of -=bits=- per second that the chip can handle.)
  117.  
  118. If you near the "limit" you will first start to see a graceful
  119. degradation in that the chip cannot keep the transmitter busy at all
  120. times. However with a central clock this slow, you can also get it to
  121. miss incoming characters.
  122.  
  123. The specialix card cannot reliably do 115k2. If you use it, you have
  124. to do "extensive testing" (*) to verify if it actually works.
  125.  
  126. When "mgetty" communicates with my modem at 115k2 it reports:
  127. got: +++[0d]ATQ0V1H0[0d][0d][8a]O[cb][0d][8a]
  128.                             ^^^^ ^^^^ ^^^^ 
  129.  
  130. The three characters that have the "^^^" under them have suffered a
  131. bit error in the highest bit. In conclusion: I've tested it, and found
  132. that it simply DOESN"T work for me. I also suspect that this is also
  133. caused by the baud rate being just a little bit out of tune. 
  134.  
  135.  
  136. (*) Cirrus logic CD1864 databook, page 40.
  137.  
  138.  
  139. Cables for the Specialix IO8+
  140. =============================
  141.  
  142. The pinout of the connectors on the IO8+ is:
  143.  
  144.      pin    short    direction    long name
  145.             name
  146.     Pin 1   DCD      input        Data Carrier Detect
  147.     Pin 2   RXD      input        Receive
  148.     Pin 3   DTR/RTS  output       Data Terminal Ready/Ready To Send
  149.     Pin 4   GND      -            Ground
  150.     Pin 5   TXD      output       Transmit
  151.     Pin 6   CTS      input        Clear To Send
  152.         
  153.     
  154.              -- 6  5  4  3  2  1 --
  155.              |                    |
  156.              |                    |
  157.              |                    |
  158.              |                    |
  159.              +-----          -----+
  160.                   |__________|
  161.                       clip
  162.     
  163.     Front view of an RJ12 connector. Cable moves "into" the paper.
  164.     (the plug is ready to plug into your mouth this way...)
  165.  
  166.     
  167.     NULL cable. I don't know who is going to use these except for
  168.     testing purposes, but I tested the cards with this cable. (It 
  169.     took quite a while to figure out, so I'm not going to delete
  170.     it. So there! :-)
  171.     
  172.     
  173.     This end goes               This end needs
  174.     straight into the           some twists in
  175.     RJ12 plug.                  the wiring.
  176.        IO8+ RJ12                   IO8+ RJ12
  177.         1  DCD       white          -
  178.         -             -             1 DCD
  179.         2  RXD       black          5 TXD
  180.         3  DTR/RTS   red            6 CTS
  181.         4  GND       green          4 GND
  182.         5  TXD       yellow         2 RXD
  183.         6  CTS       blue           3 DTR/RTS
  184.     
  185.  
  186.     Same NULL cable, but now sorted on the second column.
  187.  
  188.         1  DCD       white          -
  189.         -             -             1 DCD
  190.         5  TXD       yellow         2 RXD
  191.         6  CTS       blue           3 DTR/RTS
  192.         4  GND       green          4 GND
  193.         2  RXD       black          5 TXD
  194.         3  DTR/RTS   red            6 CTS
  195.     
  196.     
  197.     
  198.     This is a modem cable usable for hardware handshaking:
  199.         RJ12                        DB25           DB9
  200.         1   DCD      white          8 DCD          1 DCD
  201.         2   RXD      black          3 RXD          2 RXD
  202.         3   DTR/RTS  red            4 RTS          7 RTS
  203.         4   GND      green          7 GND          5 GND
  204.         5   TXD      yellow         2 TXD          3 TXD
  205.         6   CTS      blue           5 CTS          8 CTS
  206.                             +----   6 DSR          6 DSR
  207.                             +----  20 DTR          4 DTR
  208.  
  209.     This is a modem cable usable for software handshaking:
  210.     It allows you to reset the modem using the DTR ioctls.
  211.     I (REW) have never tested this, "but xxxxxxxxxxxxx
  212.     says that it works." If you test this, please
  213.     tell me and I'll fill in your name on the xxx's.
  214.  
  215.         RJ12                        DB25           DB9
  216.         1   DCD      white          8 DCD          1 DCD
  217.         2   RXD      black          3 RXD          2 RXD
  218.         3   DTR/RTS  red           20 DTR          4 DTR
  219.         4   GND      green          7 GND          5 GND
  220.         5   TXD      yellow         2 TXD          3 TXD
  221.         6   CTS      blue           5 CTS          8 CTS
  222.                             +----   6 DSR          6 DSR
  223.                             +----   4 RTS          7 RTS
  224.  
  225.    I bought a 6 wire flat cable. It was colored as indicated.
  226.    Check that yours is the same before you trust me on this.
  227.    
  228.  
  229. Hardware handshaking issues.
  230. ============================
  231.  
  232. The driver can be compiled in two different ways. The default
  233. ("Specialix DTR/RTS pin is RTS" is off) the pin behaves as DTR when
  234. hardware handshaking is off. It behaves as the RTS hardware
  235. handshaking signal when hardware handshaking is selected.
  236.  
  237. When you use this, you have to use the appropriate cable. The
  238. cable will either be compatible with hardware handshaking or with
  239. software handshaking. So switching on the fly is not really an
  240. option.
  241.  
  242. I actually prefer to use the "Specialix DTR/RTS pin is RTS" option.
  243. This makes the DTR/RTS pin always an RTS pin, and ioctls to
  244. change DTR are always ignored. I have a cable that is configured
  245. for this. 
  246.  
  247.  
  248. Ports and devices
  249. =================
  250.  
  251. Port 0 is the one furthest from the ISA connector.
  252.  
  253. Devices:
  254.  
  255. You should make the devices as follows:
  256.  
  257. bash
  258. cd /dev
  259. for i in  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 \
  260.          16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
  261. do
  262.   echo -n "$i "
  263.   mknod /dev/ttyW$i c 75 $i
  264.   mknod /dev/cuw$i c 76 $i
  265. done
  266. echo ""
  267.  
  268.  
  269. You cannot have more than 4 boards in one computer. The card only
  270. supports 4 different interrupts. If you really want this, contact me
  271. about this and I'll give you a few tips (requires soldering iron)....
  272.  
  273.  
  274. ------------------------------------------------------------------------
  275.  
  276.  
  277.   Fixed bugs and restrictions:
  278.        - During intialization, interrupts are blindly turned on.
  279.             Having a shadow variable would cause an extra memory
  280.             access on every IO instruction. 
  281.        - The interrupt (on the card) should be disabled when we
  282.          don't allocate the Linux end of the interrupt. This allows 
  283.          a different driver/card to use it while all ports are not in
  284.          use..... (a la standard serial port)
  285.        == An extra _off variant of the sx_in and sx_out macros are
  286.           now available. They don't set the interrupt enable bit.
  287.           These are used during initialization. Normal operation uses
  288.           the old variant which enables the interrupt line.
  289.        - RTS/DTR issue needs to be implemented according to 
  290.          specialix' spec.
  291.             I kind of like the "determinism" of the current 
  292.             implementation. Compile time flag?
  293.        == Ok. Compile time flag! Default is how Specialix likes it.
  294.        == Now a config time flag! Gets saved in your config file. Neat!
  295.        - Can you set the IO address from the lilo command line?
  296.             If you need this, bug me about it, I'll make it. 
  297.        == Hah! No bugging needed. Fixed! :-)
  298.        - Cirrus logic hasn't gotten back to me yet why the CD1865 can
  299.             and the CD1864 can't do 115k2. I suspect that this is
  300.             because the CD1864 is not rated for 33MHz operation.
  301.             Therefore the CD1864 versions of the card can't do 115k2 on 
  302.             all ports just like the CD1865 versions. The driver does
  303.             not block 115k2 on CD1864 cards. 
  304.         == I called the Cirrus Logic representative here in Holland.
  305.            The CD1864 databook is identical to the CD1865 databook, 
  306.            except for an extra warning at the end. Similar Bit errors
  307.            have been observed in testing at 115k2 on both an 1865 and
  308.            a 1864 chip. I see no reason why I would prohibit 115k2 on
  309.            1864 chips and not do it on 1865 chips. Actually there is
  310.            reason to prohibit it on BOTH chips. I print a warning.
  311.            If you use 115k2, you're on your own. 
  312.        - A spiky CD may send spurious HUPs. Also in CLOCAL???
  313.          -- A fix for this turned out to be counter productive. 
  314.             Different fix? Current behaviour is acceptable?
  315.          -- Maybe the current implementation is correct. If anybody
  316.             gets bitten by this, please report, and it will get fixed.
  317.  
  318.          -- Testing revealed that when in CLOCAL, the problem doesn't
  319.             occur. As warned for in the CD1865 manual, the chip may
  320.             send modem intr's on a spike. We could filter those out,
  321.             but that would be a cludge anyway (You'd still risk getting
  322.             a spurious HUP when two spikes occur.).....
  323.  
  324.  
  325.  
  326.   Bugs & restrictions:
  327.        - This is a difficult card to autoprobe.
  328.             You have to WRITE to the address register to even 
  329.             read-probe a CD186x register. Disable autodetection?
  330.          -- Specialix: any suggestions?
  331.        - Arbitrary baud rates are not implemented yet. 
  332.             If you need this, bug me about it. 
  333.  
  334.  
  335.